home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / mach-pxa / include / mach / hardware.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  6.4 KB  |  291 lines

  1. /*
  2.  *  arch/arm/mach-pxa/include/mach/hardware.h
  3.  *
  4.  *  Author:    Nicolas Pitre
  5.  *  Created:    Jun 15, 2001
  6.  *  Copyright:    MontaVista Software Inc.
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License version 2 as
  10.  * published by the Free Software Foundation.
  11.  */
  12.  
  13. #ifndef __ASM_ARCH_HARDWARE_H
  14. #define __ASM_ARCH_HARDWARE_H
  15.  
  16. /*
  17.  * We requires absolute addresses.
  18.  */
  19. #define PCIO_BASE        0
  20.  
  21. /*
  22.  * Workarounds for at least 2 errata so far require this.
  23.  * The mapping is set in mach-pxa/generic.c.
  24.  */
  25. #define UNCACHED_PHYS_0        0xff000000
  26. #define UNCACHED_ADDR        UNCACHED_PHYS_0
  27.  
  28. /*
  29.  * Intel PXA2xx internal register mapping:
  30.  *
  31.  * 0x40000000 - 0x41ffffff <--> 0xf2000000 - 0xf3ffffff
  32.  * 0x44000000 - 0x45ffffff <--> 0xf4000000 - 0xf5ffffff
  33.  * 0x48000000 - 0x49ffffff <--> 0xf6000000 - 0xf7ffffff
  34.  * 0x4c000000 - 0x4dffffff <--> 0xf8000000 - 0xf9ffffff
  35.  * 0x50000000 - 0x51ffffff <--> 0xfa000000 - 0xfbffffff
  36.  * 0x54000000 - 0x55ffffff <--> 0xfc000000 - 0xfdffffff
  37.  * 0x58000000 - 0x59ffffff <--> 0xfe000000 - 0xffffffff
  38.  *
  39.  * Note that not all PXA2xx chips implement all those addresses, and the
  40.  * kernel only maps the minimum needed range of this mapping.
  41.  */
  42. #define io_p2v(x) (0xf2000000 + ((x) & 0x01ffffff) + (((x) & 0x1c000000) >> 1))
  43. #define io_v2p(x) (0x3c000000 + ((x) & 0x01ffffff) + (((x) & 0x0e000000) << 1))
  44.  
  45. #ifndef __ASSEMBLY__
  46.  
  47. # define __REG(x)    (*((volatile u32 *)io_p2v(x)))
  48.  
  49. /* With indexed regs we don't want to feed the index through io_p2v()
  50.    especially if it is a variable, otherwise horrible code will result. */
  51. # define __REG2(x,y)    \
  52.     (*(volatile u32 *)((u32)&__REG(x) + (y)))
  53.  
  54. # define __PREG(x)    (io_v2p((u32)&(x)))
  55.  
  56. #else
  57.  
  58. # define __REG(x)    io_p2v(x)
  59. # define __PREG(x)    io_v2p(x)
  60.  
  61. #endif
  62.  
  63. #ifndef __ASSEMBLY__
  64.  
  65. #include <asm/cputype.h>
  66.  
  67. /*
  68.  *   CPU     Stepping     CPU_ID         JTAG_ID
  69.  *
  70.  *  PXA210    B0    0x69052922    0x2926C013
  71.  *  PXA210    B1    0x69052923    0x3926C013
  72.  *  PXA210    B2    0x69052924    0x4926C013
  73.  *  PXA210    C0    0x69052D25    0x5926C013
  74.  *
  75.  *  PXA250    A0    0x69052100    0x09264013
  76.  *  PXA250    A1    0x69052101    0x19264013
  77.  *  PXA250    B0    0x69052902    0x29264013
  78.  *  PXA250    B1    0x69052903    0x39264013
  79.  *  PXA250    B2    0x69052904    0x49264013
  80.  *  PXA250    C0    0x69052D05    0x59264013
  81.  *
  82.  *  PXA255    A0    0x69052D06    0x69264013
  83.  *
  84.  *  PXA26x    A0    0x69052903    0x39264013
  85.  *  PXA26x    B0    0x69052D05    0x59264013
  86.  *
  87.  *  PXA27x    A0    0x69054110    0x09265013
  88.  *  PXA27x    A1    0x69054111    0x19265013
  89.  *  PXA27x    B0    0x69054112    0x29265013
  90.  *  PXA27x    B1    0x69054113    0x39265013
  91.  *  PXA27x    C0    0x69054114    0x49265013
  92.  *  PXA27x    C5    0x69054117    0x79265013
  93.  *
  94.  *  PXA30x    A0    0x69056880    0x0E648013
  95.  *  PXA30x    A1    0x69056881    0x1E648013
  96.  *  PXA31x    A0    0x69056890    0x0E649013
  97.  *  PXA31x    A1    0x69056891    0x1E649013
  98.  *  PXA31x    A2    0x69056892    0x2E649013
  99.  *  PXA32x    B1    0x69056825    0x5E642013
  100.  *  PXA32x    B2    0x69056826    0x6E642013
  101.  *
  102.  *  PXA930    B0    0x69056835    0x5E643013
  103.  *  PXA930    B1    0x69056837    0x7E643013
  104.  *  PXA930    B2    0x69056838    0x8E643013
  105.  */
  106. #ifdef CONFIG_PXA25x
  107. #define __cpu_is_pxa210(id)                \
  108.     ({                        \
  109.         unsigned int _id = (id) & 0xf3f0;    \
  110.         _id == 0x2120;                \
  111.     })
  112.  
  113. #define __cpu_is_pxa250(id)                \
  114.     ({                        \
  115.         unsigned int _id = (id) & 0xf3ff;    \
  116.         _id <= 0x2105;                \
  117.     })
  118.  
  119. #define __cpu_is_pxa255(id)                \
  120.     ({                        \
  121.         unsigned int _id = (id) & 0xffff;    \
  122.         _id == 0x2d06;                \
  123.     })
  124.  
  125. #define __cpu_is_pxa25x(id)                \
  126.     ({                        \
  127.         unsigned int _id = (id) & 0xf300;    \
  128.         _id == 0x2100;                \
  129.     })
  130. #else
  131. #define __cpu_is_pxa210(id)    (0)
  132. #define __cpu_is_pxa250(id)    (0)
  133. #define __cpu_is_pxa255(id)    (0)
  134. #define __cpu_is_pxa25x(id)    (0)
  135. #endif
  136.  
  137. #ifdef CONFIG_PXA27x
  138. #define __cpu_is_pxa27x(id)                \
  139.     ({                        \
  140.         unsigned int _id = (id) >> 4 & 0xfff;    \
  141.         _id == 0x411;                \
  142.     })
  143. #else
  144. #define __cpu_is_pxa27x(id)    (0)
  145. #endif
  146.  
  147. #ifdef CONFIG_CPU_PXA300
  148. #define __cpu_is_pxa300(id)                \
  149.     ({                        \
  150.         unsigned int _id = (id) >> 4 & 0xfff;    \
  151.         _id == 0x688;                \
  152.      })
  153. #else
  154. #define __cpu_is_pxa300(id)    (0)
  155. #endif
  156.  
  157. #ifdef CONFIG_CPU_PXA310
  158. #define __cpu_is_pxa310(id)                \
  159.     ({                        \
  160.         unsigned int _id = (id) >> 4 & 0xfff;    \
  161.         _id == 0x689;                \
  162.      })
  163. #else
  164. #define __cpu_is_pxa310(id)    (0)
  165. #endif
  166.  
  167. #ifdef CONFIG_CPU_PXA320
  168. #define __cpu_is_pxa320(id)                \
  169.     ({                        \
  170.         unsigned int _id = (id) >> 4 & 0xfff;    \
  171.         _id == 0x603 || _id == 0x682;        \
  172.      })
  173. #else
  174. #define __cpu_is_pxa320(id)    (0)
  175. #endif
  176.  
  177. #ifdef CONFIG_CPU_PXA930
  178. #define __cpu_is_pxa930(id)                \
  179.     ({                        \
  180.         unsigned int _id = (id) >> 4 & 0xfff;    \
  181.         _id == 0x683;        \
  182.      })
  183. #else
  184. #define __cpu_is_pxa930(id)    (0)
  185. #endif
  186.  
  187. #define cpu_is_pxa210()                    \
  188.     ({                        \
  189.         __cpu_is_pxa210(read_cpuid_id());    \
  190.     })
  191.  
  192. #define cpu_is_pxa250()                    \
  193.     ({                        \
  194.         __cpu_is_pxa250(read_cpuid_id());    \
  195.     })
  196.  
  197. #define cpu_is_pxa255()                                 \
  198.     ({                                              \
  199.         __cpu_is_pxa255(read_cpuid_id());       \
  200.     })
  201.  
  202. #define cpu_is_pxa25x()                    \
  203.     ({                        \
  204.         __cpu_is_pxa25x(read_cpuid_id());    \
  205.     })
  206.  
  207. extern int cpu_is_pxa26x(void);
  208.  
  209. #define cpu_is_pxa27x()                    \
  210.     ({                        \
  211.         __cpu_is_pxa27x(read_cpuid_id());    \
  212.     })
  213.  
  214. #define cpu_is_pxa300()                    \
  215.     ({                        \
  216.         __cpu_is_pxa300(read_cpuid_id());    \
  217.      })
  218.  
  219. #define cpu_is_pxa310()                    \
  220.     ({                        \
  221.         __cpu_is_pxa310(read_cpuid_id());    \
  222.      })
  223.  
  224. #define cpu_is_pxa320()                    \
  225.     ({                        \
  226.         __cpu_is_pxa320(read_cpuid_id());    \
  227.      })
  228.  
  229. #define cpu_is_pxa930()                    \
  230.     ({                        \
  231.         unsigned int id = read_cpuid(CPUID_ID);    \
  232.         __cpu_is_pxa930(id);            \
  233.      })
  234.  
  235. /*
  236.  * CPUID Core Generation Bit
  237.  * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x
  238.  * == 0x3 for pxa300/pxa310/pxa320
  239.  */
  240. #define __cpu_is_pxa2xx(id)                \
  241.     ({                        \
  242.         unsigned int _id = (id) >> 13 & 0x7;    \
  243.         _id <= 0x2;                \
  244.      })
  245.  
  246. #define __cpu_is_pxa3xx(id)                \
  247.     ({                        \
  248.         unsigned int _id = (id) >> 13 & 0x7;    \
  249.         _id == 0x3;                \
  250.      })
  251.  
  252. #define cpu_is_pxa2xx()                    \
  253.     ({                        \
  254.         __cpu_is_pxa2xx(read_cpuid_id());    \
  255.      })
  256.  
  257. #define cpu_is_pxa3xx()                    \
  258.     ({                        \
  259.         __cpu_is_pxa3xx(read_cpuid_id());    \
  260.      })
  261.  
  262. /*
  263.  * Handy routine to set GPIO alternate functions
  264.  */
  265. extern int pxa_gpio_mode( int gpio_mode );
  266.  
  267. /*
  268.  * Return GPIO level, nonzero means high, zero is low
  269.  */
  270. extern int pxa_gpio_get_value(unsigned gpio);
  271.  
  272. /*
  273.  * Set output GPIO level
  274.  */
  275. extern void pxa_gpio_set_value(unsigned gpio, int value);
  276.  
  277. /*
  278.  * return current memory and LCD clock frequency in units of 10kHz
  279.  */
  280. extern unsigned int get_memclk_frequency_10khz(void);
  281.  
  282. #endif
  283.  
  284. #if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
  285. #define PCIBIOS_MIN_IO        0
  286. #define PCIBIOS_MIN_MEM        0
  287. #define pcibios_assign_all_busses()    1
  288. #endif
  289.  
  290. #endif  /* _ASM_ARCH_HARDWARE_H */
  291.